// #include <stdio.h>
// #include <stdbool.h>

// #define FILTER_COEFFICIENT 0.8 // 滤波系数α

// #define FILTER_WINDOW_SIZE 5 // 滑动窗口大小

// // 假定以下函数和结构体已定义
// typedef struct
// {
//     float ax, ay, az; // 线性加速度
//     float gx, gy, gz; // 重力加速度
// } AccelerationData;

// typedef struct
// {
//     float buffer[FILTER_WINDOW_SIZE]; // 滤波器缓冲区
//     int index;                        // 缓冲区索引
// } FilterBuffer;

// void init_acceleration(AccelerationData *acceleration);
// void decompose_acceleration(float adx, float ady, float adz, AccelerationData *acceleration, bool isFirstSample);
// void init_filter_buffer(FilterBuffer *filter);
// float preprocess_data(float data, FilterBuffer *filter);
// // 假设 read_sensor() 是一个函数，用于从MPU6050读取加速度数据
// void read_sensor(float *adx, float *ady, float *adz);

// int main(void)
// {
//     AccelerationData acceleration;
//     FilterBuffer filterBuffer;

//     init_acceleration(&acceleration);
//     init_filter_buffer(&filterBuffer);

//     bool isFirstSample = true;

//     while (1)
//     {
//         float adx, ady, adz;
//         read_sensor(&adx, &ady, &adz); // 从传感器读取加速度数据

//         decompose_acceleration(adx, ady, adz, &acceleration, isFirstSample);
//         isFirstSample = false;

//         // 对线性加速度进行预处理
//         acceleration.ax = preprocess_data(acceleration.ax, &filterBuffer);
//         acceleration.ay = preprocess_data(acceleration.ay, &filterBuffer);
//         acceleration.az = preprocess_data(acceleration.az, &filterBuffer);

//         // 在这里你可以添加更多的处理逻辑，比如显示数据或保存数据
//         printf("Filtered Linear Acceleration: X:%f Y:%f Z:%f\n", acceleration.ax, acceleration.ay, acceleration.az);

//         // 假设 delay() 是一个延时函数，确保采样频率不超过1000Hz
//         delay(1000); // 这里延迟1毫秒，根据你的采样率进行调整
//     }

//     return 0;
// }

// // 初始化函数，用于初始化重力加速度值
// void init_acceleration(AccelerationData *acceleration)
// {
//     acceleration->gx = 0.0;
//     acceleration->gy = 0.0;
//     acceleration->gz = 0.0;
// }

// // 加速度分解函数
// void decompose_acceleration(float adx, float ady, float adz,
//                             AccelerationData *acceleration,
//                             bool isFirstSample)
// {
//     if (isFirstSample)
//     {
//         acceleration->ax = adx;
//         acceleration->ay = ady;
//         acceleration->az = adz;
//     }
//     else
//     {
//         acceleration->gx = FILTER_COEFFICIENT * adx + (1 - FILTER_COEFFICIENT) * acceleration->gx;
//         acceleration->gy = FILTER_COEFFICIENT * ady + (1 - FILTER_COEFFICIENT) * acceleration->gy;
//         acceleration->gz = FILTER_COEFFICIENT * adz + (1 - FILTER_COEFFICIENT) * acceleration->gz;

//         acceleration->ax = adx - acceleration->gx;
//         acceleration->ay = ady - acceleration->gy;
//         acceleration->az = adz - acceleration->gz;
//     }
// }

// // 初始化滤波器缓冲区
// void init_filter_buffer(FilterBuffer *filter)
// {
//     for (int i = 0; i < FILTER_WINDOW_SIZE; i++)
//     {
//         filter->buffer[i] = 0.0;
//     }
//     filter->index = 0;
// }

// // 数据预处理函数
// float preprocess_data(float data, FilterBuffer *filter)
// {
//     filter->buffer[filter->index % FILTER_WINDOW_SIZE] = data;
//     filter->index++;

//     float sum = 0.0;
//     for (int i = 0; i < FILTER_WINDOW_SIZE; i++)
//     {
//         sum += filter->buffer[i];
//     }

//     return sum / FILTER_WINDOW_SIZE;
// }